#!/bin/bash

###########################################
#安装 rules_proto	commit 7e4afce6fe62dbff0a4a03450143146f9f2d7488
###########################################

#安装基础依赖
yum install -y gcc gcc-c++ make bazel

#安装
###########################################
#1.获取 rules_proto 源码并切换版本
cd /home
git clone https://github.com/bazelbuild/rules_proto.git
cd rules_proto
git checkout 7e4afce
#2.查看当前提交信息（确认是目标版本）
git log -1


#############################################
#运行验证
#############################################
#配置 Bazel 项目引用本地源
#1. 创建 Bazel 项目目录
mkdir -p /home/bazel_proto_project && cd /home/bazel_proto_project
#2. 编写 WORKSPACE 文件（引用本地 rules_cc 源码）
cat > WORKSPACE <<EOF
# 引用本地 rules_proto 源码
local_repository(
    name = "rules_proto",
    path = "/home/rules_proto",  # 替换为实际路径（用户当前路径为 /home/rules_proto）
)

# 加载 rules_proto 依赖（可选，根据需要添加）
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")
rules_proto_dependencies()

# 引入 Protobuf 依赖（核心依赖，用于编译 proto 文件）
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "com_google_protobuf",
    urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.12.tar.gz"],
    sha256 = "b289e04d8a4a8172744d6c9f61f9895d40230597001248b90d304e57db06d8a0b",
    strip_prefix = "protobuf-3.21.12",
)
EOF

#3. 编写示例 BUILD 文件
mkdir -p src/main/proto/com/example && cd src/main/proto/com/example
cat > BUILD <<EOF
load("@rules_proto//proto:defs.bzl", "proto_library")

proto_library(
    name = "hello_proto",
    srcs = ["hello.proto"],
    visibility = ["//visibility:public"],
)
EOF

#验证目标版本规则可用性
#1. 创建示例代码文件
cat > hello.proto <<EOF
syntax = "proto3";

package com.example;

message HelloRequest {
    string name = 1;
}

message HelloResponse {
    string message = 1;
}

service Greeter {
    rpc SayHello (HelloRequest) returns (HelloResponse) {}
}
EOF

#验证目标版本规则可用性
cd /home/bazel_proto_project
#1. 构建示例库
bazel build //src/main/proto/com/example:hello_proto
#2. 查看构建产物（应存在描述符集文件）
bazel info bazel-bin  # 获取输出路径
ls -l bazel-bin/src/main/proto/com/example  

